package com.cloudbroker.bcs.common.event.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.cloudbroker.bcs.common.event.BasicEvent;

/**
 * 用于标记接受事件通知的方法
 * @author zhaohc
 *
 */
@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface On {
    
    /**
     * 事件名称
     * @return
     */
    String value() default "";
    
    /**
     * 事件名称（如果出现，覆盖{@link #value}）
     * @return
     */
    String eventName() default "";
    
    /**
     * 事件类
     * @return
     */
    Class<? extends BasicEvent> eventClass() default BasicEvent.class;
    
    /**
     * 执行优先级<br />
     * <ol>
     * <li>值越小优先级越高，即越早被通知到</li>
     * <li>异步通知优先级高于所有的同步通知</li>
     * <li>如果该方法同时有{@link org.springframework.core.annotation.Order}注解，则以其值为准</li>
     * <li>默认值为{@link Integer#MAX_VALUE}</li>
     * </ol>
     * @return
     */
    int priority() default Integer.MAX_VALUE;
    
}
